Windows Presentation Foundation

Data binding

Po vytvoření rozhraní aplikace je potřeba zobrazit data aplikace. To se dá udělat pomocí kódu umístěného do těla metody. Tato metoda se pak volá z konstruktoru nebo z obslužné rutiny události. Načte potřebná data a umístí je do příslušných elementů. To je dostačující pro jednoduché aplikace, ale ne pro složité. Při vývoji aplikace je někdy nutné vyměnit rozhraní aplikace. Což znamená přepsat některé z metod načítajících data. Způsob načtení dat ze zdroje se třeba nezmění, ale způsob zobrazení dat ano. Může také dojít ke změnám v názvech elementů. V každém případě bude muset programátor tento kód opravit.

Pomocí data bindingu je možné přesunout načítání dat přímo do rozhraní aplikace. V XAML se vytvoří vazba mezi zdrojem a cílem dat. Odkud se data načtou, záleží na tom, jak je aplikace navržena. Data binding dovoluje získat data z vlastností objektů. Ty pak mohou být předány některému z atributů elementu.

Důležitá je i synchronizace mezi zobrazením dat a zdrojem těchto dat. Pokud se změní zdrojová data, je důležité, aby se změna promítla i do zobrazení. Někdy je také potřeba změnit přidružená data přímo v elementu, jež je zobrazuje. Tak, aby se automaticky upravená data v elementu promítla i do zdroje dat.

Data binding řeší většinu problémů spojených s načítáním dat do rozhraní aplikace. Vytvoří spoj mezi zdrojem a cílem dat. Vlastnosti tohoto spoje jsou uloženy v jediném objektu. Tento objekt je vytvořen jako instance třídy Binding.

Změna velikosti písma bez data bindingu
<TextBlock x:Name="textBlock" Canvas.Left="47" 
                   Canvas.Top="66"
                   Height="80" Width="275"
                   Text="TextBlock"
                   FontSize="12"/>

<Slider Canvas.Left="47" Canvas.Top="23" Width="191" 
      Minimum="12" Maximum="65" 
      ValueChanged="Slider_ValueChanged"/>
ValueChanged – událost oznamující změnu hodnoty při posunu (Value)
Implementace Slider_ValueChanged
private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
   textBlock.FontSize = e.NewValue;
}
e.NewValue – získání nové hodnoty vlastnosti Value
Ukázkové řešení: DataBinding/UdalostiFontSize

Změna velikosti písma s data bindingem
<TextBlock Canvas.Left="47" 
           Canvas.Top="66"
           Height="80" Width="275"
             Text="TextBlock"
             FontSize="{Binding ElementName=fontSizeSlider, Path=Value}"/>

<Slider x:Name="fontSizeSlider" Canvas.Left="47" Canvas.Top="23" Width="191" Minimum="12" Maximum="65"/>
Řetězec binding vezme data z elementu fontSizeSlider a umísti je do atributu FontSize. Pokud se data změní, změní je i v atributu FontSize.

Na Obrázku 1 je ukázka rozhrání z předcházejících dvou příkladů. Změnou polohy posuvníku se změní i velikost písma.

Ukázka z úvodní aplikace data bindingu
Obrázek 1 Ukázka z úvodní aplikace data bindingu [zdroj: vlastní]
Ukázkové řešení: DataBinding/UdalostiFontSize